package cn.imnaer.service.rpc.userinfo;

import cn.imnaer.service.persistence.model.UserPermission;
import cn.imnaer.service.rest.resquest.model.SettingUserPermissionParams;
import cn.imnaer.service.rest.view.model.UserPermissionResponse;

import java.util.List;

/**
 * Created by Administrator on 2015/5/22.
 */
public interface UserPermissionComponentRpcApi {


    /**
     * 更新用户权限
     * @param userId
     * @param params
     * @return
     * @throws RuntimeException
     * 如果
     */
    public boolean updateUserPermission(String userId, SettingUserPermissionParams params) throws RuntimeException;

    /**
     * 获得用户权限
     * @param userId
     * @return
     * @throws RuntimeException
     */
    public UserPermission getUserPermission(String userId) throws RuntimeException;

    /**
     * 获得用户权限(客户端交互模型)
     * @param userId
     * @return
     * @throws RuntimeException
     */
    public UserPermissionResponse getUserPermissionOfResponse(String userId) throws RuntimeException;
    /**
     * 是否具有查看权限
     * <p>
     *     权限暂时只有查看朋友圈权限.
     *     此方法逻辑为 :
     *     1. 是否被对方屏蔽.
     *     2. 是否自己主动关闭了查看对方的权限.
     *     3. 是否存在于黑名单中
     * </p>
     * @param selfUserId
     * @param targetUserId
     * @return
     */
    boolean isHaveViewPermission(String selfUserId, String targetUserId);

    /**
     * 获得有查看权限的好友ID
     * <p>
     *     权限暂时只有查看朋友圈权限.
     *     此方法逻辑为 :
     *     1. 是否被对方屏蔽.
     *     2. 是否自己主动关闭了查看对方的权限.
     *     3. 是否存在于黑名单中
     * </p>
     * @param selfUserId
     * @param selfFriendUserIds
     * @return
     */
    public List<String> getHaveViewPermissionUserIds(String selfUserId, List<String> selfFriendUserIds);


    /**
     * 计算是否具有查看权限
     * <p>
     *     计算当前用户是否具有查看目标用户权限 : <br/>
     *      1. 是否相互为好友 <br/>
     *      2. 是否被设置黑名单. <br/>
     *      3. 是否被对方屏蔽查看. <br/>
     *      4. 是否被自己屏蔽查看对方. <br/>
     * </p>
     * @param selfUserId     自己的ID
     * @param targetUserId 朋友的ID
     * @return
     */
    public boolean calculateViewPermission(String selfUserId, String targetUserId);

    /**
     * 计算可以查看的(具备权限)的好友ID集合
     * <p>
     *     计算可以查看的(具备权限)的好友ID集合 : <br/>
     *      1. 是否相互为好友 <br/>
     *      2. 是否被设置黑名单. <br/>
     *      3. 是否被对方屏蔽查看. <br/>
     *      4. 是否被自己屏蔽查看对方. <br/>
     * </p>
     * @param selfUserId
     * @return
     */
    public List<String> calculateViewPermission(String selfUserId);
}
